package domain;

import java.util.LinkedList;
import java.util.List;

import reglas.Regla;

public class Firewall {

	private static Firewall instancia = new Firewall();
	private List<Regla> reglas = new LinkedList<Regla>();
	private List<String> logDeMensajes = new LinkedList<String>();
	private Router router;

	public static Firewall getInstance() {
		return instancia;
	}

	public void aplicarReglas(Paquete paquete) {
		for (Regla regla : this.reglas) {
			if(regla.seAplica(paquete)){
				regla.aplicar(paquete);
				break;
			}
		}
	}

	public void enviarPaquete(Paquete paquete) {
		this.getRouter().enviarPaquete(paquete);
	}

	public void agregarRegla(Regla unaRegla) {
		this.getReglas().add(unaRegla);
	}

	public void informarAlOrigen(IP unaIP, String accion) {
		this.getRouter().informarOrigen(unaIP, accion);
	}

	public void loguearMensaje(String mensaje) {
		System.out.println(mensaje);
	}

	// setters & getters
	public List<Regla> getReglas() {
		return reglas;
	}

	public void setReglas(List<Regla> reglas) {
		this.reglas = reglas;
	}

	public Router getRouter() {
		return router;
	}

	public void setRouter(Router router) {
		this.router = router;
	}

	public List<String> getLogDeMensajes() {
		return logDeMensajes;
	}

	public void setLogDeMensajes(List<String> logDeMensajes) {
		this.logDeMensajes = logDeMensajes;
	}
}
